/****************************************************************************/
/** \file demo_adc.c
**
**  
**
**	History:
**	
*****************************************************************************/
/****************************************************************************/
/*	include files
*****************************************************************************/
#include "BSP_adc.h"
#include "Temp_Control.h"
/****************************************************************************/
/*	Local pre-processor symbols('#define')
****************************************************************************/

/****************************************************************************/
/*	Global variable definitions(declared in header file with 'extern')
****************************************************************************/

/****************************************************************************/
/*	Local type definitions('typedef')
****************************************************************************/

/****************************************************************************/
/*	Local variable  definitions('static')
****************************************************************************/

/****************************************************************************/
/*	Local function prototypes('static')
****************************************************************************/

/****************************************************************************/
/*	Function implementation - global ('extern') and local('static')
****************************************************************************/
/******************************************************************************
 ** \brief	 ADC_Config
 ** \param [in] 
 **            	
 ** \return  none
 ** \note  
 ******************************************************************************/
void ADC_Config_TC(void)
{
	//����ADC������ģʽ
	ADC_ConfigRunMode(ADC_CLK_DIV_256, ADC_RESULT_LEFT);	//����ADCʱ��Ϊϵͳʱ�ӵ�256��Ƶ��ADC���Ϊ�����
	//����ADCת��ͨ��
	ADC_EnableChannel(ADC_CH_13);
	GPIO_SET_MUX_MODE(P31CFG, GPIO_P31_MUX_AN13);
	
	//����ADC LDO
//	ADC_EnableLDO();
//	ADC_ConfigADCVref(ADC_VREF_3V);		//ADC_VREF_1P2V, ADC_VREF_2V, ADC_VREF_2P4V, ADC_VREF_3V	
	
	//����ADC�ж�
	ADC_EnableInt();
	IRQ_SET_PRIORITY(IRQ_ADC,IRQ_PRIORITY_HIGH);	
	IRQ_ALL_ENABLE();
	
	//����ADC
	ADC_Start();
}

void ADC_Config_PTA(void)
{
	//����ADC������ģʽ
	ADC_ConfigRunMode(ADC_CLK_DIV_256, ADC_RESULT_LEFT);	//����ADCʱ��Ϊϵͳʱ�ӵ�256��Ƶ��ADC���Ϊ�����
	//����ADCת��ͨ��
	ADC_EnableChannel(ADC_CH_13);
	GPIO_SET_MUX_MODE(P31CFG, GPIO_P31_MUX_AN13);	
	
	//����ADC LDO
//	ADC_EnableLDO();
//	ADC_ConfigADCVref(ADC_VREF_3V);		//ADC_VREF_1P2V, ADC_VREF_2V, ADC_VREF_2P4V, ADC_VREF_3V	
	
	//����ADC�ж�
	ADC_EnableInt();
	IRQ_SET_PRIORITY(IRQ_ADC,IRQ_PRIORITY_HIGH);	
	IRQ_ALL_ENABLE();
	
	//����ADC
	ADC_Start();
}

void ADC_Config_NTC(void)
{
	//����ADC������ģʽ
	ADC_ConfigRunMode(ADC_CLK_DIV_256, ADC_RESULT_LEFT);	//����ADCʱ��Ϊϵͳʱ�ӵ�256��Ƶ��ADC���Ϊ�����
	//����ADCת��ͨ��
	ADC_EnableChannel(ADC_CH_12);
	GPIO_SET_MUX_MODE(P26CFG, GPIO_P26_MUX_AN12);	
	
	//����ADC LDO
//	ADC_EnableLDO();
//	ADC_ConfigADCVref(ADC_VREF_3V);		//ADC_VREF_1P2V, ADC_VREF_2V, ADC_VREF_2P4V, ADC_VREF_3V	
	
	//����ADC�ж�
	ADC_EnableInt();
	IRQ_SET_PRIORITY(IRQ_ADC,IRQ_PRIORITY_HIGH);	
	IRQ_ALL_ENABLE();
	
	//����ADC
	ADC_Start();
}

void ADC_Config_P21(void)
{
	//����ADC������ģʽ
	ADC_ConfigRunMode(ADC_CLK_DIV_256, ADC_RESULT_LEFT);	//����ADCʱ��Ϊϵͳʱ�ӵ�256��Ƶ��ADC���Ϊ�����
	//����ADCת��ͨ��
	ADC_EnableChannel(ADC_CH_21);
	GPIO_SET_MUX_MODE(P21CFG, GPIO_P21_MUX_AN21);	
	
	//����ADC LDO
	ADC_EnableLDO();
	ADC_ConfigADCVref(ADC_VREF_3V);		//ADC_VREF_1P2V, ADC_VREF_2V, ADC_VREF_2P4V, ADC_VREF_3V	
	
	//����ADC�ж�
	ADC_EnableInt();
	IRQ_SET_PRIORITY(IRQ_ADC,IRQ_PRIORITY_HIGH);	
	IRQ_ALL_ENABLE();
	
	//����ADC
	ADC_Start();
}

/**
  * @brief  ADC_TC��������
  * @param  ��
  * @retval ��
  */
uint16_t ADC_Sample_TC(void)
{
//	static uint16_t adc_result_last, adc_result_now;
	ADC_Config_TC();
	ADC_GO();
	while (ADC_IS_BUSY);
//	adc_result_last = adc_result_now;
//	adc_result_now = ADC_GetADCResult();
//	GusADC_Result = adc_result_last * 0.3 + adc_result_now * 0.7;
	
	return ADC_GetADCResult();
//	GusADC_Result = ((float)GusADC_Result / 4095) * 100;
}

/**
  * @brief  ADC��������
  * @param  ��
  * @retval ��
  */
void ADC_Sample_NTC(void)
{
	ADC_Config_NTC();
	ADC_GO();
	while (ADC_IS_BUSY);
	GusADC_Result = ADC_GetADCResult();
//	GusADC_Result = ((float)GusADC_Result / 4095) * 100;
}

void ADC_Sample_P21(void)
{
	ADC_Config_P21();
	ADC_GO();
	while (ADC_IS_BUSY);
	GusADC_Result = ADC_GetADCResult();
//	GusADC_Result = ((float)GusADC_Result / 4095) * 100;
}

void ADC_Sample_PTA(void)
{
	ADC_Config_PTA();
	ADC_GO();
	while (ADC_IS_BUSY);
	GusADC_Result = ADC_GetADCResult();
//	GusADC_Result = ((float)GusADC_Result / 4095) * 100;
}
